#include "encoder.h"

/*编码器计数值*/
static volatile int32_t enc_cnt[2];

/**
 * @brief 编码器初始化
 * @param None
 * @retval None
 */
void enc_init(void)
{
	/*编码器1*/
	//中断输入
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN6);
	//非中断输入
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN7);
	//清除中断标志位
	GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN6);
	//配置触发方式
	GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN6,GPIO_LOW_TO_HIGH_TRANSITION);
	//开启外部中断
	GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN6);
	//开启端口中断
	Interrupt_enableInterrupt(INT_PORT1);

	
	
	/*编码器2*/
	//中断输入
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN6);
	//非中断输入
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN7);
	//清除中断标志位
	GPIO_clearInterruptFlag(GPIO_PORT_P2,GPIO_PIN6);
	//配置触发方式
	GPIO_interruptEdgeSelect(GPIO_PORT_P2,GPIO_PIN6,GPIO_LOW_TO_HIGH_TRANSITION);
	//开启外部中断
	GPIO_enableInterrupt(GPIO_PORT_P2,GPIO_PIN6);
	//开启端口中断
	Interrupt_enableInterrupt(INT_PORT2);		
}


/**
 * @brief 编码器读取计数的差分(速度)
 * @param which 哪一个编码器(0-1)
 * @retval 差分速度
 */
int32_t enc_read(uint8_t which)
{
	int32_t t;
	
	//暂存
	t = enc_cnt[which];
	//清零
	enc_cnt[which] = 0;
	
	return t;
}


/**
 * @brief 外部中断服务函数
 * @param None 
 * @retval None
 */
void PORT1_IRQHandler(void)
{
    uint32_t status;

    status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
    GPIO_clearInterruptFlag(GPIO_PORT_P1,status);

    if(status & GPIO_PIN6)
    {
		if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN7))
		{
			enc_cnt[0]++;
		}
		else
		{
			enc_cnt[0]--;
		}
    }
}



/**
 * @brief 外部中断服务函数
 * @param None 
 * @retval None
 */
void PORT2_IRQHandler(void)
{
    uint32_t status;

    status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P2);
    GPIO_clearInterruptFlag(GPIO_PORT_P2, status);

    if(status & GPIO_PIN6)
    {
		if(GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN7))
		{
			enc_cnt[1]++;
		}
		else
		{
			enc_cnt[1]--;
		}
    }
}


